home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
mcomm
/
smalterm.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1994-10-02
|
60KB
|
1,578 lines
/////////////////////////////////////////////////////////////////////////////
// S M A L T E R M -- D e m o D r i v e r f o r M C O M M //
// A s y n c R o u t i n e s //
// //
// //
// Mike Dumdei, 6 Holly Lane, Texarkana TX 75503 //
// North East Texas DataLink, 903 838-6713 //
// //
// (Link with comm_s.lib for external functions) //
// ztc smalterm.cpp comm.cpp comm_s.lib //
// bcc smalterm.cpp comm.cpp comm_s.lib //
// tcc smalterm.cpp comm.cpp comm_s.lib //
// cl smalterm.cpp comm.cpp /link comm_s //
/////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <process.h>
#include <stdarg.h>
#include <dos.h>
#include <bios.h>
#include <signal.h>
#include "comm.hpp" // header for AsyncPort class
#include "timer.hpp" // header for Timer class
#include "ansivid.hpp" // header for ANSI display functions
#define KEY_INT
#include "keys.h" // key definition header
#include "colors.h" // vid mode & color definition header
#include "extra.h" // extra functions header
#if defined(__TURBOC__) // Turbo C++
#define KBHIT bioskey(1)
#define KBREAD bioskey(0)
#else // Zortech C++, Microsoft C++
#define KBHIT _bios_keybrd(1)
#define KBREAD _bios_keybrd(0)
#endif
#ifndef __ZTC__
#include <io.h>
#define strcmpl stricmp
#endif
#define NO_INPUT (-1)
#define ESC_PRESSED (-2)
#define TIMED_OUT (-3)
#define NO_CARRIER (-4)
#define ERROR_LIMIT (-5)
#define GOT_CANNED (-6)
#define BLK_COMP_ERR (-7)
#define BLK_SEQ_ERR (-8)
#define CHECKSUM_ERR (-9)
#define TERMINAL 0
#define HOSTMODE 1 // hostmode isn't in here yet
#define SOH '\x01'
#define STX '\x02'
#define EOT '\x04'
#define ACK '\x06'
#define NAK '\x15'
#define CAN '\x18'
///////////////////////////////////////////////////////////////
// function declarations in order found in source (random) //
//:////////////////////////////////////////////////////////////
// void ControlBreakHandler(int sig);
int ProcessKeyPress();
void ProcessExtendedKey(int LongCh);
int ProcessAsyncChar();
int SaveScreen();
void RestoreScreen();
void VideoStatus(int saving);
void ClearScreen();
void ToggleLogFile();
void ToggleEcho();
void ToggleLineFeeds();
void ToggleDtr();
void DialNumber();
void DOS_Shell();
void DOS_Command();
void HostMode();
void MessageUpload();
void TXZMUpload();
void TXZMDownload();
void RunBatchFile(char *FileName);
void SendFile();
void ReceiveFile();
void ExitProgram();
int DisplayHelp();
void DisplayParameters();
void ChangeParameters();
int DrawBox(int Top, int Lft, int Height, int Length);
void RemoveBox();
int Prompt(char *Response, char *PromptMsg, int MaxResponse);
void HangUp();
int MonitoredDelay(int Ticks, int MonitorCarrier);
int WaitFor(char *String, int Ticks, int MonitorCarrier);
void vDisplay(char *Format, ...);
void vDisplay(int Color, char *Format, ...);
void vDisplay(int Row, int Col, char *Format, ...);
int PushScreen(int Row, int Col, int NbrRows, int NbrCols);
int PopScreen();
void ReceiveXmodem(char *FileName);
void SendXmodem(char *FileName, int BlockSize = 128);
void XmodemExitMsg(int rval);
int RxWithTimeOut(int Ticks);
void SetXmodemMode(char& save_xoff, char& save_flushbad, char *save_params);
void ResetXmodemMode(char& save_xoff, char& save_flushbad, char *save_params);
void SendCANs();
int WaitForBlockToEnd(int Ticks);
int GetHdrChar(int Ticks);
void TransferWindow(int Flag);
////////////////////////
// global variables //
////////////////////////
AsyncPort port(4096, 2048); // port with 4K transmit, 2K receive buffers
char port_name[5]; // ASCII "COM1" or "COM2"
int port_number; // assigned number COM1==0, COM2==1
int Mode; // identifies to subroutines HOST or TERMINAL
FILE *LogFile = NULL; // handle for log file
char DialString[40]; // storage for dial string
int LineFeeds = 0; // supply LineFeeds flag
int Echo = 0; // Echo on flag
int Dtr = 1; // DTR signal level flag
int cyn, hred, grn, hgrn; // video color variables to enable support
int wht, hblu, ylw; // for either color or mono system
char vDispBuf[128]; // buffer for formatted display functions
char *ScreensArray[10]; // array of pointers for Push/Pop Screen
char ScreenIndex = 0; // index of current pointer in above array
/////////////////////////////////////////////////
// main //
//://////////////////////////////////////////////
int cdecl main (int argc, char *argv[])
{
char params[10], *pc;
int got_port = 0, return_value, i;
////////////////////////////////////
// process command line arguments //
////////////////////////////////////
*params = '\0'; // preset params to nul string
for (i = 1; i < argc; i++)
{
pc = argv[i]; // pointer to argument
if (*pc == '-' || *pc == '/')
++pc; // skip any switch characters
if (got_port == 0)
{
if (strcmpl(argv[i], "COM1") == 0) // check for "COM1"
got_port = 1;
else if (strcmpl(argv[i], "COM2") == 0) // check for "COM2"
got_port = 1, port_number = COM2;
}
if (isdigit(*pc) && strlen(pc) < 10) // check for parameter string
strupr(strcpy(params, argv[i]));
}
strcpy(port_name, (port_number == COM1) ? "COM1" : "COM2");
///////////////////////////
// initialize the video //
///////////////////////////
initvid(); // initialize lowlevel video variables
if (v_mode != MONO && v_mode != CO80)
setvmode(CO80); // reset video mode if necessary
if (v_mode == CO80)
{ // attributes to use if color system
cyn = CYN, hred = H_RED, grn = GRN, hgrn = H_GRN,
wht = WHT, hblu = H_BLU, ylw = YLW;
}
else
{ // attributes to use if mono system
cyn = WHT, hred = H_WHT, grn = WHT, hgrn = H_WHT,
wht = WHT, hblu = H_WHT, ylw = H_WHT;
}
SaveScreen();
/////////////////////////////
// display sign on message //
/////////////////////////////
Display(hred, "SMALTERM - Sample driver for MCOMM library functions\n");
Display(grn, " Mike Dumdei, 6 Holly Lane, Texarkana TX 75503\n");
Display(" North East Texas DataLink 903 838-6713\n");
Display(hred, "Usage: smalterm {COM1 | COM2} {param str EX: 2400N81}\n\n");
v_color = cyn;
//////////////////////////
// open the serial port //
//////////////////////////
return_value = port.Open(port_number, params);
if (return_value != 0) // if port open failed
{
vDisplay(
"SMALTERM: Can't open %s, Parameters: %s, Error code: %04X\n",
port_name, (*params) ? params : "default", return_value);
exit(return_value);
} // if port open succeeded
vDisplay("SMALTERM: %s -- PORT OPENED\n\n", port_name);
Displa